<?php

namespace mpend\models;

use common\models\actor\Actor;
use Yii;
use yii\filters\RateLimitInterface;

/**
 * User model
 */
class User extends \common\models\BaseUser implements RateLimitInterface {

    public $token;

    // 返回在单位时间内允许的请求的最大数目，例如，[10, 60] 表示在60秒内最多请求10次。
    public function getAllowance() {
        return Yii::$app->cache->get($this->id . '_allowance');
    }

    public function getAllowanceUpdatedAt() {
        return Yii::$app->cache->get($this->id . '_allowance_updated_at');
    }

    // 返回在单位时间内允许的请求的最大数目，例如，[10, 60] 表示在60秒内最多请求10次。
    public function getRateLimit($request, $action) {
        return [15, 1];
    }

    // 返回剩余的允许的请求数。
    public function loadAllowance($request, $action) {
        return [$this->allowance, $this->allowanceUpdatedAt];
    }

    // 保存请求时的UNIX时间戳。
    public function saveAllowance($request, $action, $allowance, $timestamp) {
        Yii::$app->cache->set($this->id . '_allowance', $allowance);
        Yii::$app->cache->set($this->id . '_allowance_updated_at', $timestamp);
    }

    public function getActor() {
        return $this->hasOne(Actor::class, ['user_id' => 'id']);
    }

    public function fields() {
        return [
            'id',
            'username',
            'mobile' => function () {
                return $this->decryptMobile();
            },
            'avatar' => function () {
                return $this->avatar;
            },
        ];
    }

}
